import request from '@/utils/request'

// 封装统一获取字典的方法
export const getDict = (config) => {
    if (config.dict && config.dict.useDict && config.dict.url) {
        request.get(config.dict.url).then(res => {
            let rawList = []
            // 支持两种格式：数组 或 { data: [] }
            if (Array.isArray(res)) {
                rawList = res
            } else if (Array.isArray(res.data)) {
                rawList = res.data
            }
            const labelKey = config.dict.labelKey || 'label'
            const valueKey = config.dict.valueKey || 'value'
            // 统一格式化为 { label, value }
            const options = rawList.map(item => ({
                label: item[labelKey],
                value: item[valueKey]
            }))
            if (options.length != 0) {// 只有取到字典值才覆盖
                config.options = options
            }
        }).catch(err => {
            console.warn('字典请求失败:', err)
        })
    }
}

// 封装统一获取树结构的方法
export const getTreeDict = (config) => {
    if (config.dict?.useDict && config.dict.url) {
        request.get(config.dict.url).then(res => {
            let rawList = Array.isArray(res) ? res : res.data || []

            const labelKey = config.dict.labelKey || 'label'
            const valueKey = config.dict.valueKey || 'value'

            const formatTree = (list) =>
                list.map(item => ({
                    label: item[labelKey],
                    value: item[valueKey],
                    children: Array.isArray(item.children) ? formatTree(item.children) : undefined
                }))

            const options = formatTree(rawList)
            if (options.length) {
                config.options = options
            }
        }).catch(err => {
            console.warn('字典请求失败:', err)
        })
    }
}